#include <iostream>
#include <unistd.h>
#include "Common.hpp"

int main() {
    // 将对应的文件描述符设置为非阻塞
    SetNonBlock(0);
    char buff[1024];

    while (true) {
        // 从键盘读取
        ssize_t n = read(0, buff, sizeof(buff) - 1);
        if (n > 0) {
            buff[n] = 0;
            std::cout << "echo > " << buff << std::endl;
        } else if (n == 0) {
            std::cout << "read done" << std::endl;
            break;
        } else {
            // 当非阻塞读取数据的时候，若没有读到数据返回值小于0
            if (errno == EWOULDBLOCK) {
                // 错误码等于EWOULDBLOCK的时候表面底层没有数据，需要轮询读取
                // sleep(1);
                std::cout << "havn't data, begin to rotate" << std::endl;
                continue;
            } else if (errno == EINTR) {
                // 数据因为被发送的信号而打断接收，重新读取
                continue;
            } else {
                std::cout << "read error" << std::endl;
                break;
            }
        }
    }
    return 0;
}
